ZMQ PUSH/PULL模型:当节点按下消息并退出时丢失消息 您所在的位置:网站首页 zmq消息队列 丢失 ZMQ PUSH/PULL模型:当节点按下消息并退出时丢失消息

ZMQ PUSH/PULL模型:当节点按下消息并退出时丢失消息

#ZMQ PUSH/PULL模型:当节点按下消息并退出时丢失消息| 来源: 网络整理| 查看: 265

我有一个要求,即PHP Web应用程序将消息写入非阻塞队列,并且其他进程会将它们出列。我目前的设计是PHP应用程序创建一个ZMQ.PUSH套接字,做一个connect到目的地址和send的消息。在目的地,一个进程(Java)创建一个ZMQ.PULL套接字,在同一个地址和receive上执行bind消息。但是,当出列器进程关闭(或未启动)时,PHP应用程序在此期间发送的消息会丢失(当进程在同一地址上再次启动时,不会将其发送到出队器)。这是PHP应用程序每次创建新的ZMQ.Context的问题吗?ZMQ PUSH/PULL模型:当节点按下消息并退出时丢失消息

作为一个例子,我创建了另一个Java进程来将消息写入队列。

public static void main(String[] args) { ZMQ.Context context = ZMQ.context(1); ZMQ.Socket socket = context.socket(ZMQ.PUSH); socket.connect("tcp://localhost:5557"); for(int i = 0; i < 10; i++) { socket.send(("Sending : " + message).getBytes(), 0); } }

如果上述过程在上述过程完成时未启动,那么这与丢失消息具有相同的问题。

但是,在上述方法主体的末尾添加一个while(true) {}不会导致任何丢失的消息 - 所有消息都在出列队列启动时传递。那么我是否正确地假设ZMQ.Context对象被垃圾回收导致问题在这里?如果是,那么如何在PHP Web应用程序中解决这个问题?由于我无法坚持ZMQ.Context的对象。

来源

2011-10-21 asc



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有